Go性能分析工具:pprof | 您所在的位置:网站首页 › go tool pprof trace › Go性能分析工具:pprof |
1. 简介 pprof 是profile(画像)的缩写,是Go中很常用的获取数据、分析数据的工具。pprof有很多优点:可视化,除此之外,go原生,简单方便,很容易上手。 go tool pprof 是对应的命令行指令。它的源数据既可以是一个http地址,也可以是已经获取到的profile文件。使用go tool pprof命令时,既可以采用交互式终端,也可以采用web进行可视化分析,除此之外可以直接将数据生成svg图片,进行静态的分析。 pprof可以分析以下9中数据: 这9项对应的内容如下: Profile项 说明 详情 allocs 内存分配 从程序启动开始,分配的全部内存 block 阻塞 导致同步原语阻塞的堆栈跟踪 cmdline 命令行调用 当前程序的命令行调用 goroutine gorouting 所有当前 goroutine 的堆栈跟踪 heap 堆 活动对象的内存分配抽样。您可以指定 gc 参数以在获取堆样本之前运行 GC mutex 互斥锁 争用互斥锁持有者的堆栈跟踪 profile CPU分析 CPU 使用率分析。可以在url中,通过seconds指定持续时间(默认30s)。获取配置文件后,使用 go tool pprof 命令分析CPU使用情况 threadcreate 线程创建 导致创建新操作系统线程的堆栈跟踪 trace 追踪 当前程序的执行轨迹。可以在url中,通过seconds指定持续时间(默认30s)。获取跟踪文件后,使用 go tool trace 命令调查跟踪 在性能分析时,使用最多有三种:内存分析(allocs,heap),CPU分析(profile), 阻塞分析(block), 互斥锁分析(mutex)。 下面详细介绍pprof的使用方法。 2. 数据获取pprof的应用场景主要分为两种: 服务型应用,例如web服务器等各种服务类型端的性能分析工具型应用,例如一些命令行工具,执行完毕后直接退出的应用针对这两种不同的应用场景,pprof有不同的用法。下面做一个详细的介绍 2.1 工具型应用????工具型应用使用runtime/pprof库,将CPU、内存信息手动写到文件中!!! package mainimport ( "fmt" "os" "runtime/pprof") func main() { cpuProfile, err := os.Create("./pprof/cpu_profile") if err != nil { fmt.Printf("创建文件失败:%s", err.Error()) return } defer cpuProfile.Close() memProfile, err := os.Create("./pprof/mem_profile") if err != nil { fmt.Printf("创建文件失败:%s", err.Error()) return } defer memProfile.Close() //采集CPU信息 pprof.StartCPUProfile(cpuProfile) defer pprof.StopCPUProfile() //采集内存信息 pprof.WriteHeapProfile(memProfile) for i := 0; i |
CopyRight 2018-2019 实验室设备网 版权所有 |